export function renderMixin(Vue) {
  // 标签
  Vue.prototype._c = function () {
    // 传入多个参数，第一个为标签名，第二个为属性，第三个及其后为子元素
    return createElement(this, ...arguments);
  }
  // 文本
  Vue.prototype._v = function (text) {
    return createText(text);
  }
  // 变量
  Vue.prototype._s = function (val) {
    // 使用了with(this)之后，val会自动变为对应变量
    return val === null ? "" : (typeof val === 'object' ? JSON.stringify(val) : val);
  }
  Vue.prototype._render = function () {
    let vm = this;
    let render = vm.$options.render;
    let vnode = render.call(vm);
    return vnode;
  }
}

function createElement(vm, tag, data = {}, ...children) {
  // if (isLabel(tag)) { // 标签
  //   return vnode(tag, data, data?.key || undefined, children, undefined);
  // } else { // 组件
  //   const Ctor = vm.$options.components[tag].options;
  //   return createComponent(vm, tag, data, children, Ctor);
  // }
  return vnode(tag, data, data?.key || undefined, children, undefined);
}

function createComponent(vm, tag, data, children, Ctor) {
  let template = Ctor.template;
  if (typeof Ctor === 'object') {
    console.log(vm.constructor.extend());
  } else {

  }
}

function isLabel(tag) {
  let labelArys = ['div', 'span', 'p', 'a', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'li'];
  return labelArys.includes(tag);
}

function createText(text) {
  return vnode(undefined, undefined, undefined, undefined, text);
}

function vnode(tag, data, key, children, text) {
  return {
    tag,
    data,
    key,
    children,
    text
  }
}